昨天已經使用了 Docker Hub 把 Docker Image 傳送到網路上了,所有人都可以把此 Docker Image Pull 下來使用。但是有以下的需求使用者就不適合把 Docker Image 放到公開的網路上,像是有些軟體有 License 的問題、考慮到有安全性的問題、希望更快的網路速度……等等的需求,就不適合直接把 Docker Image上傳到網路上,而需要把 Docker Image放在內部網路裡。
今天就來介紹要如何的建立一個 Private(私有) 的 Docker Registry
今天要實作的部份如下:
一. 建立 Docker Registry Server
*直接透過啟動 Docker container 的方式,就可以把 Docker Registry Server 建立起來,指令如下:
$ docker run -d -p 5000:5000 -v /home/user1/storage:/var/lib/registry --name registry registry:2
參數說明如下:
-d:執行的 docker container 是 run 在背景的狀態,所以需要使用 docker logs
的指令才可以看到 log 狀態
-p:主機的 5000 port mapping 到 container 的 5000 port
-v:因為 push 到 docker registry 的資料是放在 container 裡面的,如果把 docker container 刪除掉 docker registry 的 Image 資料就會不見,因此需要使用 –v 參數將主機的檔案路徑 mapping 到 container 裡面的檔案路徑,這樣 docker container 被刪除 docker registry 的 Image 資料還會存在
--name:設定 docker container 的名稱
執行成功之後畫面如下:
二. 把第5天做好的 Docker Image Push 到上個步驟架設好的 Docker Registry Server
docker tag
的指令如下:$ docker tag mytomcat 192.168.182.134:5000/mytomcat
因為這裡是 Demo 所以直接使用 IP 位址指定 Docker Reigstry 的位址,在實務上這是 Hard Code的做法,所以較好做法應該是使用指定 Host Name的方式。
$ docker push 192.168.182.134:5000/mytomcat
畫面如下:
沒有成功的把 Docker Image Push 到 Docker Registry 上
vi /etc/docker/daemon.json
{
"live-restore": true,
"group": "dockerroot",
"insecure-registries": ["192.168.182.134:5000"]
}
(2) 重新啟動 Docker 的 service 指令如下
$ systemctl restart docker
$ docker push 192.168.182.134:5000/mytomcat
可以看到畫面如下
以上就成功的把 Docker Image Push 到了 Docker Hub 上了
三. 再另外找一台電腦把 Docker Image Pull下來測試
$ vi /etc/docker/daemon.json
{
"live-restore": true,
"group": "dockerroot",
"insecure-registries": ["192.168.182.134:5000"]
}
$ systemctl restart docker
$ docker pull 192.168.182.134:5000/mytomcat
今天我們已經架設了一個 private 的 Docker Reigstry,如果是私人使用是沒有問題的,但是如果放在一個規模很大的公司上執行還是會有問題,像是安全性問題例如規定哪些使用者可以 Push Image 或是哪些使用者只能 Pull Image 的問題,所以考慮的層面需要更廣,這些在網路上都能找到很多的參考資料。
想問一下第二點的第三點,所提到的安全性是指 ?
應該是說 Docker Client 需要使用 Https 的協定, 但是 docker registry 沒有使用到 https 協定所發生的問題
所以這裡指的安全性指的是 https 的傳輸安全協定
"live-restore": true,
"group": "dockerroot",
"insecure-registries": ["192.168.182.134:5000"]
作者可以解釋一下嗎~~ 我有點乎傻傻...
live-restore:
live-restore 設定成 true,是指把 docker 的 daemon 關閉之後, 在執行的 Docker Container 不會跟著關閉,保持執行的狀態。這是在 docker 1.12 的版本開始之後提供的功能
group:
設定在執行 docker daemon 的 group 為 dockerroot,所以如果你的使用者要可以執行 docker daemon 權限,就需要把你的使用者加入到 dockerroot 的 group
insecure-registries:
insecure 的意思是非安全性,所以如果是使用 http 協定的 docker registry 就需要設定此參數
所以 itachi0124 你有實際去使用 docker registry 了嗎?那你使用的情境為何?
不知道作者還會不會看到
當我要 pull image 的時候
我會拿到 error pulling image configuration: unknown blob
的錯誤
我該怎麼修正呢?
因為之前沒有遇到這種狀況, 所以可以描述一下使用的作業系統版本, docker 版本以及把使用到的指令都列出來, 這樣我才可以去測試.